//package com.ruoyi.framework.interceptor;
//
//import com.ruoyi.common.utils.StringUtils;
//import com.ruoyi.framework.util.JsonUtil;
//import com.ruoyi.framework.web.service.ConfigService;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.stereotype.Component;
//import org.springframework.web.servlet.function.ServerResponse;
//import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
//
//import javax.servlet.http.HttpServletRequest;
//import javax.servlet.http.HttpServletResponse;
//import java.util.Collection;
//import java.util.HashMap;
//import java.util.Iterator;
//import java.util.Map;
//
///**
// * @ClassName RequestInterceptor
// * @Description: TODO
// * @Author LiuJiaji
// * @Date 2022/11/26 14:42
// **/
//@Component
//public class RequestInterceptor extends HandlerInterceptorAdapter {
//
//    @Autowired
//    private ConfigService configService;
//
//    @Override
//    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
//
//        //拦截的URL
//        String[] notFilter = new String[]{
//                "/api/cardOrder",
//                "/api/diag",
//                "/api/hospital",
//                "/api/inspection",
//                "/api/register",
//                "/api/user"
//        };
//        /*String [] urlStrArray = request.getRequestURI().split("/");
//         String urlStr = urlStrArray[urlStrArray.length - 1];
//         if("0".equals(configService.getKey(urlStr))){
//             AjaxResult ajaxResult = AjaxResult.error("暂未开放");
//             ServletUtils.renderString(response, JSON.marshal(ajaxResult));
//             return false;
//         }*/
//
//        String key = configService.getKey("Interceptor");
//        if ("0".equals(key)) {
//            return true;
//        }
//        //获取请求的设备
//        String apiToken = request.getHeader("token");
//        System.out.println("token:" + apiToken);
//
//        System.out.println(request.getRequestURI());
//        System.out.println(isContains(request.getRequestURI(), notFilter));
////        if (!isContains(request.getRequestURI(), notFilter)) {
////            //支付宝回调
////            return true;
////        } else {//来自支付宝 或微信
////            if (apiToken != null) {
////                boolean result = TokenUtil.verify(apiToken);
////                if (result) {
////                    System.out.println("通过拦截器");
////                    if (filterResult(request)) {
////                        System.out.println("请求异常");
////                        return false;
////                    } else {
////                        return true;
////                    }
////                } else {
////                    System.out.println("验签失败");
////                    JsonUtil.outJson(response, ServerResponse.error(ResponseEnum.ATTESTATION_OF_FAILURE));
////                    return false;
////                }
////            } else {
////                System.out.println("token为空");
////                JsonUtil.outJson(response, ServerResponse.error(ResponseEnum.TOKEN_IS_NULL));
////                return false;
////            }
////        }
//        return true;
//    }
//
//    public boolean filterResult(HttpServletRequest req) {
//        String[] filter = new String[]{
//                "net user",
//                "xp_cmdshell",
//                "add ",
//                "exec master.dbo.xp_cmdshell",
//                "net localgroup administrators",
//                "select ",
//                "count ",
//                "Asc",
//                "char",
//                "mid",
//                "insert ",
//                "delete from ",
//                "drop table ",
//                "update ",
//                "truncate ",
//                "from ",
//                "%",
//                "waitfor",
//                "and ",
//                "or ",
//                "union",
//                "sleep",
//                "concat",
//                "concat_ws",
//                "group_concat",
//                "/…/",
//                "if ",
//                "version",
//                "database",
//                "user()",
//                "@@datadir",
//                "@@version",
//                "current_user",
//                "@@baserdir",
//                "into outfile",
//                "load_file",
//                "subtring(",
//                "substr(",
//                "concat",
//                "ascii"
//        };
//        Map<String, String> paraMap = getParameterMap(req);
//        Collection<String> values = paraMap.values();
//        boolean result = false;
//        for (String value : values) {
//            if (isContainsIgnoreCase(value, filter)) {
//                System.out.println("异常值为：" + value);
//                return true;
//            }
//        }
//        return result;
//    }
//
//    public boolean isContainsIgnoreCase(String container, String[] regx) {
//        boolean result = false;
//
//        for (String key : regx) {
//            if (StringUtils.containsIgnoreCase(container, key)) {
//                System.out.println("匹配到的sql字段：" + key);
//                return true;
//            }
//        }
//        return result;
//    }
//
//    @SuppressWarnings({"unchecked", "rawtypes"})
//    public Map<String, String> getParameterMap(HttpServletRequest request) {
//        // 参数Map
//        Map properties = request.getParameterMap();
//        // 返回值Map
//        Map returnMap = new HashMap();
//        Iterator entries = properties.entrySet().iterator();
//        Map.Entry entry;
//        String name = "";
//        String value = "";
//        while (entries.hasNext()) {
//            entry = (Map.Entry) entries.next();
//            name = (String) entry.getKey();
//            Object valueObj = entry.getValue();
//            if (null == valueObj) {
//                value = "";
//            } else if (valueObj instanceof String[]) {
//                String[] values = (String[]) valueObj;
//                for (int i = 0; i < values.length; i++) {
//                    value = values[i] + ",";
//                }
//                value = value.substring(0, value.length() - 1);
//            } else {
//                value = valueObj.toString();
//            }
//            returnMap.put(name, value);
//        }
//        return returnMap;
//    }
//
//    public static boolean isContains(String container, String[] regx) {
//        boolean result = false;
//
//        for (int i = 0; i < regx.length; i++) {
//            if (container.indexOf(regx[i]) != -1) {
//                return true;
//            }
//        }
//        return result;
//    }
//}
